// package cn.autumnorange.app.gateway.zuul;
//
// import cn.autumnorange.app.common.redis.service.RedisUtil;
// import cn.autumnorange.app.common.util.IpUtil;
// import lombok.extern.slf4j.Slf4j;
// import org.apache.commons.lang3.StringUtils;
// import org.aspectj.lang.ProceedingJoinPoint;
// import org.aspectj.lang.annotation.Around;
// import org.aspectj.lang.annotation.Aspect;
// import org.aspectj.lang.reflect.MethodSignature;
// import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.stereotype.Component;
// import org.springframework.web.context.request.RequestContextHolder;
// import org.springframework.web.context.request.ServletRequestAttributes;
//
// import javax.servlet.http.HttpServletRequest;
// import java.lang.reflect.Method;
// import java.util.UUID;
//
/// **
// * 重复提交aop
// *
// * @data: 2019-03-26 16:39
// */
// @Aspect
// @Component
// @Slf4j
// public class AvoidRepeatableCommitAspect {
//  public static final String REDIS_ROOT = "WX:ccx-:";
//
//  public static final long DAY = 1000L * 60 * 60 * 24;
//
//  public static final long HOUR = 1000L * 60 * 60;
//
//  public static final long MINUTE = 1000L * 60;
//
//  public static final long MINUTE_10 = 1000L * 60 * 10;
//
//  public static final long HALF_HOUR = 1000L * 60 * 30;
//
//  public static final long SECOND = 1000L;
//
//  @Autowired private RedisUtil redisUtil;
//
//  /** @param point */
//  @Around("@annotation(cn.autumnorange.app.gateway.zuul.AvoidRepeatableCommit)")
//  public Object around(ProceedingJoinPoint point) throws Throwable {
//
//    HttpServletRequest request =
//        ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
//    String ip = IpUtil.getIpAddrByNginx(request);
//    // 获取注解
//    MethodSignature signature = (MethodSignature) point.getSignature();
//    Method method = signature.getMethod();
//    // 目标类、方法
//    String className = method.getDeclaringClass().getName();
//    String name = method.getName();
//    String ipKey = String.format("%s#%s", className, name);
//    int hashCode = Math.abs(ipKey.hashCode());
//    // ip地址加目标类、方法
//    String key = REDIS_ROOT + String.format("%s_%d", ip, hashCode);
//
//    log.info("ipKey={},hashCode={},key={}", ipKey, hashCode, key);
//    AvoidRepeatableCommit avoidRepeatableCommit =
// method.getAnnotation(AvoidRepeatableCommit.class);
//    long timeout = avoidRepeatableCommit.timeout();
//    if (timeout < 0) {
//      timeout = 3 * SECOND;
//    }
//    String value = (String) redisUtil.get(key);
//    if (StringUtils.isNotBlank(value)) {
//
//      return "请勿重复提交";
//    }
//    redisUtil.set(key, UUID.randomUUID().toString(), timeout);
//    // 执行方法
//    Object object = point.proceed();
//
//    return object;
//  }
// }
